package com.own.stu.bytebuddy.methodDelegation;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import net.bytebuddy.implementation.bind.annotation.*;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.concurrent.Callable;

public class UserManagerDelegation4 {

    /**
     * 被@RuntimeType标准的方法就是拦截方法,此时方法签名[或返回值, 这里不一样，会有转换异常]可以与被拦截方法不一致
     *
     */
    @RuntimeType
    public String randName(
            // 目标方法的参数
            @AllArguments Object[] targetMethodArgs,
            // 用于调用目标方法
            @Morph MyCallable zCall
    ) {
        System.out.println("Arrays.tostring(targetMethodArgs)= " + Arrays.toString(targetMethodArgs));

        try{
            targetMethodArgs[0] = ((Long)targetMethodArgs[0]) + 1;
            return (String) zCall.call(targetMethodArgs);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
